/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package RRHH_controlador;

import Conexion.Conexion;
import Modelo.SIS_LOG;
import RRHH_Modelo.RHH_CARGO;
import RRHH_Modelo.RHH_CARGO_DATOS;
import RRHH_Modelo.RHH_CARGO_DEP_REG_SUC;
import RRHH_Modelo.RHH_CATEGORIA_DATO;
import RRHH_Modelo.RHH_DATOS;
import RRHH_Modelo.RHH_REGIONAL;
import RRHH_Modelo.RHH_REGIONAL_DEPTO;
import RRHH_Modelo.RHH_SUCURSAL;
import RRHH_Modelo.RHH_TIPOS_CARGO;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "RRHH_CARGOS_CONTROLLER", urlPatterns = {"/RRHH_CARGOS_CONTROLLER"})
public class RRHH_CARGOS_CONTROLLER extends HttpServlet {
    
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String proceso=request.getParameter("proceso");
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            String html="";
            switch(proceso){
                case "buscarRegional":
                    html=buscarRegional(request,con);
                    break;
                case "buscarSucursales":
                    html=buscarSucursales(request,con);
                    break;
               
                case "GuardarNuevo":
                    html=GuardarNuevo(request,con,usuario);
                    break;
                case "seleccionarSubMenu":
                    html=seleccionarSubMenu(con,request);
                    break;
                case "quitarAgregarRoll":
                    html=quitarAgregarRoll(con,request,usuario);
                    break;
                case "buscarDependiente":
                    html=buscarDependiente(con,request);
                    break;
                case "insertarTipo":
                    html=insertarTCargo(con,request);
                    break;
                case "insertarDato":
                    html=insertardato(con,request);
                    break;
                case "insertarDocs":
                    html=insertardocs(con,request);
                    break;
                case "eliminarPerfil":
                    html=eliminarPerfil(con,request,usuario);
                    break;
                case "eliminarDato":
                    html=eliminarDato(con,request,usuario);
                    break;
                case "nuebacatdato":
                    html=nuebacatdato(con,request,usuario);
                    break;
            }
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
        } catch (SQLException ex) {
            Logger.getLogger(RRHH_CARGOS_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
    public String buscarRegional( HttpServletRequest request,Conexion con) throws SQLException{
        double IdDepartamento = Double.parseDouble(request.getParameter("Iddepartamento"));
        RHH_REGIONAL_DEPTO regional_depto = new RHH_REGIONAL_DEPTO();
        regional_depto.setCon(con);
        List<RHH_REGIONAL_DEPTO> listareg = regional_depto.TodosLosActivos(IdDepartamento);
        String html="<option value='1'>-TODAS-</option>";
        for(int i =0; i<listareg.size(); i++)
        {
            RHH_REGIONAL reg = new RHH_REGIONAL(con);
            reg.setCon(con);
            reg = reg.BuscarXid(listareg.get(i).getID_REGIONAL());
            html+="<option value="+reg.getID()+">"+reg.getDESCRIPCION()+"</option>";
        }
        
        return html;
    }
    public String buscarSucursales( HttpServletRequest request,Conexion con){
        RHH_SUCURSAL suc = new RHH_SUCURSAL(con);
        suc.setCon(con);
        
        double IdRegional = Double.parseDouble(request.getParameter("Idregional"));
        
        List<RHH_SUCURSAL> Lista = suc.BuscarXRegional(IdRegional);
        String html="<option value='1'>-TODAS-</option>";
        for(int i =0; i<Lista.size(); i++)
        {
            html+="<option value="+Lista.get(i).getID()+">"+Lista.get(i).getDESCRIPCION()+"</option>";
        }
        
        return html;
    }
    public String buscarDependiente(Conexion con, HttpServletRequest request) throws SQLException{
        
        RHH_CARGO cargo = new RHH_CARGO(con);
        cargo.setCon(con);                
        List<RHH_CARGO> ListaConGerencia = cargo.Todos();
        String html="{\"dependientes\":[ ";
        for(int j = 0; j<ListaConGerencia.size(); j++)
        {
            html+="\"<option value='"+ListaConGerencia.get(j).getID()+"'>"+ListaConGerencia.get(j).getDESCRIPCION()+"</option>\",";
        }
        
        html=html.substring(0,html.length()-1)+"],\"tiposcargo\":[ ";
         List<RHH_TIPOS_CARGO> ListaTipos = new RHH_TIPOS_CARGO(con).Todos();
         
        for(int j = 0; j<ListaTipos.size(); j++)
        {
            html+="\"<option value='"+ListaTipos.get(j).getID()+"'>"+ListaTipos.get(j).getDESCRIPCION()+"</option>\",";
        }
        html=html.substring(0,html.length()-1)+"],\"lista_datos\":[ ";
        List<RHH_DATOS> ListaDatos = new RHH_DATOS(con).TodosDatos();
        for(int j = 0; j<ListaDatos.size(); j++)
        {
            html+="\"<li><span>"+ListaDatos.get(j).getDESCRIPCION()+":</span><input type='checkbox' value='"+ListaDatos.get(j).getID()+"'/><span onclick='eliminardato("+ListaDatos.get(j).getID()+",this);'>(X)</span></li>\",";
        }
        html=html.substring(0,html.length()-1)+"],\"lista_docs\":[ ";
        List<RHH_DATOS> ListaDocs = new RHH_DATOS(con).TodosDocs();
        for(int j = 0; j<ListaDocs.size(); j++)
        {
            html+="\"<li><span>"+ListaDocs.get(j).getDESCRIPCION()+":</span><input type='checkbox' value='"+ListaDocs.get(j).getID()+"'/><span onclick='eliminardato("+ListaDocs.get(j).getID()+",this);'>(X)</span></li>\",";
        }
        html=html.substring(0,html.length()-1)+"]";
        return html+"}";
    }
  
    public String insertarTCargo(Conexion con, HttpServletRequest request) throws SQLException
    {     
        String desc = request.getParameter("desc");
        RHH_TIPOS_CARGO tipo = new RHH_TIPOS_CARGO(0, desc);
        tipo.setCon(con);
        int tcargo = tipo.Insertar();
        return "<option value='"+tcargo+"' selected='selected'>"+desc+"</option>";
    }
    public String insertardato(Conexion con, HttpServletRequest request) throws SQLException
    {     
        String desc = request.getParameter("desc");
        int idcatdato = Integer.parseInt(request.getParameter("idtipo"));
        RHH_DATOS tipo = new RHH_DATOS(0, desc,0,1,idcatdato);
        tipo.setCon(con);
        int tcargo = tipo.Insertar();
        return "<li><span>"+desc+":</span><input type='checkbox' value='"+tcargo+"'/><span onclick='eliminardato("+tcargo+",this);'>(X)</span></li>";
    }
    public String insertardocs(Conexion con, HttpServletRequest request) throws SQLException
    {     
       String desc = request.getParameter("desc");
       int idcatdato = Integer.parseInt(request.getParameter("idcatdoc"));
        RHH_DATOS tipo = new RHH_DATOS(1, desc,0,0,idcatdato);
        tipo.setCon(con);
        int tcargo = tipo.Insertar();
        return "<li><span>"+desc+":</span><input type='checkbox' value='"+tcargo+"'/><span onclick='eliminardato("+tcargo+",this);'>(X)</span></li>";
    }
    public String eliminarPerfil(Conexion con, HttpServletRequest request, RHH_USUARIO usr) throws SQLException{
           
            con.Transacction();
            int id = Integer.parseInt(request.getParameter("Eliminar"));
            RHH_CARGO depto = new RHH_CARGO(con);
            depto.setCon(con);
            depto = depto.BuscarXid(id);
            if(depto.EliminarXid())
            {
                SIS_LOG.LOG(usr.getID(), 2, "ELIMINO EL CARGO "+depto.getDESCRIPCION(), con);
                con.commit();
            }
            else
                con.rollback();
            
            return seleccionarSubMenu(con,request);
        
       
        
    }
    
    public String quitarAgregarRoll(Conexion con, HttpServletRequest request,RHH_USUARIO usuario ) throws SQLException{
        
        int idcargo = Integer.parseInt(request.getParameter("idCargo"));
        double idPer = Double.parseDouble(request.getParameter("idPer"));
        String Idregional = request.getParameter("IdRegional");
        String Idsucursal = request.getParameter("IdSucursal");
        String Iddpto = request.getParameter("Iddepartamento");
        RHH_CARGO_DEP_REG_SUC cargo=new RHH_CARGO_DEP_REG_SUC(idPer,idcargo, Double.parseDouble(Idsucursal), Double.parseDouble(Iddpto), Double.parseDouble(Idregional));
        cargo.setCon(con);
        
        
        try
        {
            if(idPer == 0)
            {
                cargo.Insertar();
            }
            else{
                cargo.BuscarId(idcargo, Double.parseDouble(Iddpto) , Double.parseDouble(Idregional), Double.parseDouble(Idsucursal));
                cargo.EliminarXid();
            }
        }
        catch(Exception ex)
        {
            
        }
        return seleccionarSubMenu(con, request);
    }
    
    
    
    public String seleccionarSubMenu(Conexion con, HttpServletRequest request) throws SQLException{
        String Idregional = request.getParameter("IdRegional");
        String Idsucursal = request.getParameter("IdSucursal");
        String Iddpto = request.getParameter("Iddepartamento");
        RHH_CARGO_DEP_REG_SUC cargoDep=new RHH_CARGO_DEP_REG_SUC(con);
        cargoDep.setCon(con);
        RHH_CARGO cargo=new RHH_CARGO(con);
        cargo.setCon(con);
        int tipo=0;
        if(!Iddpto.equals("0") && !Idregional.equals("0") && !Idsucursal.equals("0")){
            tipo=3;
        }
        if(!Iddpto.equals("0") && !Idregional.equals("0") && Idsucursal.equals("0")){
            tipo=2;
        }
        if(!Iddpto.equals("0") && Idregional.equals("0") && Idsucursal.equals("0")){
            tipo=1;
        }
        List<RHH_CARGO_DEP_REG_SUC> listaAsignado=cargoDep.CargoAsignado(tipo,Iddpto,Idregional,Idsucursal);
        List<RHH_CARGO> listaNoAsignado=cargo.CargoNoAsignado();
        
        String html="<div class='contenedor50 c1' style=\"border-right: solid white thin;\" data-estado='inactivo'>";
        for(int i = 0; i<listaNoAsignado.size(); i++)
        {
            html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='inactivo' "
                    + "data-id=0 data-idCargo="+listaNoAsignado.get(i).getID()+">"
                    + listaNoAsignado.get(i).getDESCRIPCION()
                    +"<a href='#' onclick=\"eliminarPerfil("+listaNoAsignado.get(i).getID()+")\">X</a></div>";
        }
        html+="</div><div class='contenedor50 c2' data-estado='activo'>"
                ;
        if(listaAsignado!=null)
        for(int i = 0; i<listaAsignado.size(); i++)
        {
            cargo=cargo.BuscarXid(listaAsignado.get(i).getID_CARGO());
            html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='activo'"
                    + "data-idCargo="+listaAsignado.get(i).getID_CARGO()+ " data-id="+listaAsignado.get(i).getID()+">"
                    + cargo.getDESCRIPCION()
                    +"</div>";
        }
        html+="</div>";
        return html;
    }
    
    public String GuardarNuevo(HttpServletRequest request, Conexion con, RHH_USUARIO usr) throws SQLException{
        con.Transacction();
        try
        {
            String desc = request.getParameter("descripcion");
            String perfil = request.getParameter("perfil");
            int dependencia = Integer.parseInt(request.getParameter("dependencia"));
            int tipo = Integer.parseInt(request.getParameter("tipo"));
            RHH_CARGO cargo = new RHH_CARGO(con);
            cargo.setCon(con);
            cargo = cargo.BuscarXid(dependencia);
            RHH_CARGO cargonew = new RHH_CARGO(dependencia, tipo, cargo.getNIVEL()+1, desc, perfil);
            cargonew.setCon(con);
            int idcargonew=cargonew.Insertar();

            String listadatos = request.getParameter("listadatos");
            StringTokenizer tokendato=new StringTokenizer(listadatos,",");                
            while(tokendato.hasMoreTokens())
            {
                int iddato= Integer.parseInt(tokendato.nextToken());
                RHH_CARGO_DATOS cardat = new RHH_CARGO_DATOS(idcargonew, iddato);
                cardat.setCon(con);
                cardat.Insertar();
            }

            String listadocs = request.getParameter("listadocs");
            StringTokenizer tokendocs=new StringTokenizer(listadocs,",");                
            while(tokendocs.hasMoreTokens())
            {
                int iddocs= Integer.parseInt(tokendocs.nextToken());
                RHH_CARGO_DATOS cardoc = new RHH_CARGO_DATOS(idcargonew, iddocs);
                cardoc.setCon(con);
                cardoc.Insertar();
            }

            SIS_LOG.LOG(usr.getID(), 2, "CREO EL CARGO "+desc, con);
            con.commit();
        }
        catch(NumberFormatException | SQLException e)
        {
            con.rollback();
        }
        return seleccionarSubMenu(con,request);
    }
    
    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String eliminarDato(Conexion con, HttpServletRequest request, RHH_USUARIO usuario) throws SQLException {
        int id = Integer.parseInt(request.getParameter("id"));
        RHH_DATOS dato = new RHH_DATOS(con);
        dato.EliminarXid(id);
        return "true";
    }

    private String nuebacatdato(Conexion con, HttpServletRequest request, RHH_USUARIO usuario) throws SQLException {
        String html="";
        String desc=request.getParameter("desc");
        RHH_CATEGORIA_DATO cat = new RHH_CATEGORIA_DATO(con);
        cat.setDESCRIPCION(desc);
        int id = cat.Insertar();
        html+="<option val='"+id+"'>"+desc+"</option>";
        return html;
    }
}
